package com.dys.testtreeset10;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * @className: com.dys.testtreeset10.TreeSetTest
 * @description: TreeSet: 二叉树
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/08 下午9:18
 */
public class TreeSetTest {
    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        new TreeSetTest().testPerson3();
    }

    /**
     * int类型的存储
     * 唯一，无序(没有按照输入顺序进行输出)，有序（按照升序进行遍历）
     */
    public void testInt() {
        TreeSet<Integer> treeSet = new TreeSet<Integer>();
        treeSet.add(1);
        treeSet.add(2);
        treeSet.add(3);
        treeSet.add(4);
        treeSet.add(5);
        treeSet.add(3);
        System.out.println(treeSet);
    }

    /**
     * 底层实现内部比较器
     */
    public void testString() {
        TreeSet<String> ts = new TreeSet<>();
        ts.add("azhangsan");
        ts.add("bzhangsan");
        ts.add("czhangsan");
        ts.add("dzhangsan");
        ts.add("ezhangsan");
        ts.add("czhangsan");
        System.out.println(ts);
    }

    /**
     * 想放入自定义的Student类型的数据：利用内部比较器
     */
    public void testStudent() {
        TreeSet<Student> ts = new TreeSet<>();
        ts.add(new Student("alili", 22));
        ts.add(new Student("blili", 20));
        ts.add(new Student("clili", 22));
        ts.add(new Student("clili", 24));
        System.out.println(ts);
    }

    /**
     * 通过外部比较器实现
     */
    public void testPerson() {
        Comparator<Person> bj = new BiJiao1();
        // //一旦指定外部比较器，那么就会按照外部比较器来比较
        TreeSet<Person> ts = new TreeSet<>(bj);
        ts.add(new Person("alili", 22));
        ts.add(new Person("blili", 20));
        ts.add(new Person("clili", 22));
        ts.add(new Person("clili", 24));
        ts.add(new Person("clili", 24));
        System.out.println(ts.size());
        System.out.println(ts);
    }

    public void testPerson2() {
        Comparator<Person> com = new Comparator<Person>() {

            @Override
            public int compare(Person o1, Person o2) {
                return o1.getName().compareTo(o2.getName());
            }
        };
        TreeSet<Person> ts = new TreeSet<>(com);
        ts.add(new Person("alili", 22));
        ts.add(new Person("blili", 20));
        ts.add(new Person("clili", 22));
        ts.add(new Person("clili", 24));
        System.out.println(ts.size());
        System.out.println(ts);
    }

    public void testPerson3() {
        TreeSet<Person> ts = new TreeSet<>(new Comparator<Person>() {

            @Override
            public int compare(Person o1, Person o2) {
                return o1.getAge() - o2.getAge();
            }
        });

        ts.add(new Person("alili", 22));
        ts.add(new Person("blili", 20));
        ts.add(new Person("clili", 22));
        ts.add(new Person("clili", 24));
        System.out.println(ts.size());
        System.out.println(ts);
    }
}
